﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Mx.Ipn.Escom.TT20080015.Modelo.DB;
using Mx.Ipn.Escom.TT20080015.Modelo.Datos;

namespace Mx.Ipn.Escom.TT20080015.Vistas.Control
{
    public partial class UsuarioView : System.Web.UI.Page
    {
        /// <summary>
        /// Se cargan los componentes de la página.
        /// </summary>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["user"] == null)
                Server.Transfer("~/Default.aspx", false);

            if (Context.Items.Contains("Id"))
            {
                idHiddenField.Value = Context.Items["Id"].ToString();
                try
                {
                    Usuario p = UsuarioManager.Consultar(Convert.ToInt32(idHiddenField.Value));
                    idHiddenField.Value = p.Id.ToString();
                    tbNombre.Text = p.Nombre;
                    tbAPaterno.Text = p.APaterno;
                    tbAMaterno.Text = p.AMaterno;
                    tbUsuario.Text = p.Username;
                    tbPass.Text = p.ClaveAcceso;
                    tbCorreo.Text = p.CorreoElectronico;
                    perfilHiddenField.Value = p.Perfil;
                }
                catch (Exception ex)
                {
                    Context.Items.Add("msg", ex.Message);
                    Server.Transfer("../../vistas/control/PaginaError.aspx", false);
                }


                modificarButton.Visible = true;
                eliminarButton.Visible = true;
                claveLabel.Visible = false;
                tbPass.Visible = false;
                confirmacionLabel.Visible = false;
                tbPassConfirm.Visible = false;
            }

        }

        /// <summary>
        /// Este método se encarga de registrar un usuario en la base de datos.
        /// </summary>
        protected void btnRegistrar_Click(object sender, EventArgs e)
        {
            try
            {
                UsuarioManager.Registrar(ObtenerUsuario());
            }
            catch (Exception ex)
            {
                Context.Items.Add("msg", ex.Message);
                Server.Transfer("../../vistas/control/PaginaError.aspx", false);
            }
            Context.Items.Add("msg", "El usuario ha sido registrado satisfactoriamente.");
            Server.Transfer("../../vistas/control/Control.aspx", false);
        }

        /// <summary>
        /// Este método realiza la actualización de los datos de un Usuario y confirma la acción.
        /// </summary>
        protected void modificarButton_Click(object sender, EventArgs e)
        {
            try
            {
                UsuarioManager.Actualizar(ObtenerUsuario());
            }
            catch (Exception ex)
            {
                Context.Items.Add("msg", ex.Message);
                Server.Transfer("../../vistas/control/PaginaError.aspx", false);
            }

            Context.Items.Add("msg", "Los datos del usuario han sido actualizados");
            Server.Transfer("../../vistas/control/Control.aspx", false);
        }

        /// <summary>
        /// Este método se encarga de eliminar un usuario y confirma la acción.
        /// </summary>
        protected void eliminarButton_Click(object sender, EventArgs e)
        {
            try
            {
                UsuarioManager.Eliminar(idHiddenField.Value);
            }
            catch (Exception ex)
            {
                Context.Items.Add("msg", ex.Message);
                Server.Transfer("../../vistas/control/PaginaError.aspx", false);
            }

            Context.Items.Add("msg", "El usuario ha sido eliminado");
            Server.Transfer("../../vistas/control/Control.aspx", false);
        }

        /// <summary>
        /// Este método obtiene los datos capturados en el formulario de registro de un nuevo usuario.
        /// </summary>
        /// <returns>Un objeto Usuario</returns>
        protected Usuario ObtenerUsuario()
        {
            return new Usuario(Convert.ToInt32(idHiddenField.Value), Util.Validar(tbNombre.Text), Util.Validar(tbAPaterno.Text),
                Util.Validar(tbAMaterno.Text), Util.Validar(tbUsuario.Text), tbPass.Text, tbCorreo.Text, perfilHiddenField.Value);
        }
    }
}
